package leilao.model;

/**
 * Interace que representa um Produto
 * @author Leonardo Rocha Dias
 * @version 9.11-28
 * @since 2009
 */
public interface Produto {

    /**
     * Um participante faz uma oferta através de um lance e este lance é
     * registrado. Um lance válido deve ter valor maior que 0.0.
     * Cada cliente pode dar quantos lances quiser (sejam repetidos ou não).
     * @param lance ofertado
     * @return verdadeiro se adicionado ou falso caso contrário
     */
    public boolean ofertar(Lance lance);

    /**
     * Deve receber um lance e informar se o lance já foi
     * efetuado. Somente um método para consulta e facilitar os testes.
     * @param lance
     * @return
     */
    public boolean lanceJaFeito(Lance lance);

    /**
     * Finaliza o leilão e retorna qual o lance vencedor.
     * O lance vencedor é o que tem o menor valor não-repetido.
     * @return menor lance único, ganhador, vencedor
     */
    public Lance finalizar();

    public String getDescricao();

}
